/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package plum.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import plum.Action;
import plum.ChoiceDecision;
import plum.ChoiceValue;
import plum.CloneAction;
import plum.Decision;
import plum.DecisionModel;
import plum.DefaultSelectChoiceValueAction;
import plum.DefaultValueAction;
import plum.Dependency;
import plum.Group;
import plum.MinMaxDecision;
import plum.MinMaxValuesAction;
import plum.NameAction;
import plum.PlumFactory;
import plum.PlumPackage;
import plum.SelectChoiceValueAction;
import plum.SimpleDecision;
import plum.ValidityAction;
import plum.ValueAction;
import plum.ValueType;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class PlumPackageImpl extends EPackageImpl implements PlumPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass decisionModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass dependencyEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass decisionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass groupEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass simpleDecisionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass minMaxDecisionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass choiceDecisionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass choiceValueEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass actionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass defaultSelectChoiceValueActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass selectChoiceValueActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass validityActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass valueActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass defaultValueActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass minMaxValuesActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass nameActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cloneActionEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum valueTypeEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see plum.PlumPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private PlumPackageImpl() {
		super(eNS_URI, PlumFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link PlumPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static PlumPackage init() {
		if (isInited) return (PlumPackage)EPackage.Registry.INSTANCE.getEPackage(PlumPackage.eNS_URI);

		// Obtain or create and register package
		PlumPackageImpl thePlumPackage = (PlumPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof PlumPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new PlumPackageImpl());

		isInited = true;

		// Create package meta-data objects
		thePlumPackage.createPackageContents();

		// Initialize created meta-data
		thePlumPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		thePlumPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(PlumPackage.eNS_URI, thePlumPackage);
		return thePlumPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDecisionModel() {
		return decisionModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDecisionModel_Dependencies() {
		return (EReference)decisionModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDecisionModel_Decisions() {
		return (EReference)decisionModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecisionModel_Name() {
		return (EAttribute)decisionModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecisionModel_Description() {
		return (EAttribute)decisionModelEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecisionModel_Version() {
		return (EAttribute)decisionModelEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDependency() {
		return dependencyEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDependency_TriggerQuery() {
		return (EAttribute)dependencyEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDependency_Name() {
		return (EAttribute)dependencyEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDependency_Condition() {
		return (EAttribute)dependencyEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDependency_Description() {
		return (EAttribute)dependencyEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDependency_Trigger() {
		return (EReference)dependencyEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDependency_Action() {
		return (EReference)dependencyEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDecision() {
		return decisionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDecision_ClonedFrom() {
		return (EReference)decisionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecision_Name() {
		return (EAttribute)decisionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecision_Description() {
		return (EAttribute)decisionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecision_Validity() {
		return (EAttribute)decisionEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecision_Id() {
		return (EAttribute)decisionEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDecision_Clonable() {
		return (EAttribute)decisionEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getGroup() {
		return groupEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getGroup_Decisions() {
		return (EReference)groupEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSimpleDecision() {
		return simpleDecisionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSimpleDecision_DefaultValue() {
		return (EAttribute)simpleDecisionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSimpleDecision_Value() {
		return (EAttribute)simpleDecisionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSimpleDecision_ValueType() {
		return (EAttribute)simpleDecisionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMinMaxDecision() {
		return minMaxDecisionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMinMaxDecision_MinBoundary() {
		return (EAttribute)minMaxDecisionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMinMaxDecision_MaxBoundary() {
		return (EAttribute)minMaxDecisionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getChoiceDecision() {
		return choiceDecisionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getChoiceDecision_MinSelected() {
		return (EAttribute)choiceDecisionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getChoiceDecision_MaxSelected() {
		return (EAttribute)choiceDecisionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getChoiceDecision_DefaultSelected() {
		return (EReference)choiceDecisionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getChoiceDecision_Selected() {
		return (EReference)choiceDecisionEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getChoiceDecision_Choicevalues() {
		return (EReference)choiceDecisionEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getChoiceValue() {
		return choiceValueEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getChoiceValue_Name() {
		return (EAttribute)choiceValueEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAction() {
		return actionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAction_AffectsToQuery() {
		return (EAttribute)actionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getAction_AffectsTo() {
		return (EReference)actionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDefaultSelectChoiceValueAction() {
		return defaultSelectChoiceValueActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDefaultSelectChoiceValueAction_SelectedQuery() {
		return (EAttribute)defaultSelectChoiceValueActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getDefaultSelectChoiceValueAction_Selected() {
		return (EReference)defaultSelectChoiceValueActionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getSelectChoiceValueAction() {
		return selectChoiceValueActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getSelectChoiceValueAction_SelectedQuery() {
		return (EAttribute)selectChoiceValueActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSelectChoiceValueAction_Selected() {
		return (EReference)selectChoiceValueActionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getSelectChoiceValueAction_EReference0() {
		return (EReference)selectChoiceValueActionEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getValidityAction() {
		return validityActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getValidityAction_ConditionQuery() {
		return (EAttribute)validityActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getValueAction() {
		return valueActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getValueAction_ValueQuery() {
		return (EAttribute)valueActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDefaultValueAction() {
		return defaultValueActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDefaultValueAction_ValueQuery() {
		return (EAttribute)defaultValueActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMinMaxValuesAction() {
		return minMaxValuesActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMinMaxValuesAction_MinValueQuery() {
		return (EAttribute)minMaxValuesActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMinMaxValuesAction_MaxValueQuery() {
		return (EAttribute)minMaxValuesActionEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNameAction() {
		return nameActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNameAction_NameValueQuery() {
		return (EAttribute)nameActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCloneAction() {
		return cloneActionEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCloneAction_NumberOfClones() {
		return (EAttribute)cloneActionEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getValueType() {
		return valueTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public PlumFactory getPlumFactory() {
		return (PlumFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		decisionModelEClass = createEClass(DECISION_MODEL);
		createEReference(decisionModelEClass, DECISION_MODEL__DEPENDENCIES);
		createEReference(decisionModelEClass, DECISION_MODEL__DECISIONS);
		createEAttribute(decisionModelEClass, DECISION_MODEL__NAME);
		createEAttribute(decisionModelEClass, DECISION_MODEL__DESCRIPTION);
		createEAttribute(decisionModelEClass, DECISION_MODEL__VERSION);

		dependencyEClass = createEClass(DEPENDENCY);
		createEAttribute(dependencyEClass, DEPENDENCY__TRIGGER_QUERY);
		createEAttribute(dependencyEClass, DEPENDENCY__NAME);
		createEAttribute(dependencyEClass, DEPENDENCY__CONDITION);
		createEAttribute(dependencyEClass, DEPENDENCY__DESCRIPTION);
		createEReference(dependencyEClass, DEPENDENCY__TRIGGER);
		createEReference(dependencyEClass, DEPENDENCY__ACTION);

		decisionEClass = createEClass(DECISION);
		createEReference(decisionEClass, DECISION__CLONED_FROM);
		createEAttribute(decisionEClass, DECISION__NAME);
		createEAttribute(decisionEClass, DECISION__DESCRIPTION);
		createEAttribute(decisionEClass, DECISION__VALIDITY);
		createEAttribute(decisionEClass, DECISION__ID);
		createEAttribute(decisionEClass, DECISION__CLONABLE);

		groupEClass = createEClass(GROUP);
		createEReference(groupEClass, GROUP__DECISIONS);

		simpleDecisionEClass = createEClass(SIMPLE_DECISION);
		createEAttribute(simpleDecisionEClass, SIMPLE_DECISION__DEFAULT_VALUE);
		createEAttribute(simpleDecisionEClass, SIMPLE_DECISION__VALUE);
		createEAttribute(simpleDecisionEClass, SIMPLE_DECISION__VALUE_TYPE);

		minMaxDecisionEClass = createEClass(MIN_MAX_DECISION);
		createEAttribute(minMaxDecisionEClass, MIN_MAX_DECISION__MIN_BOUNDARY);
		createEAttribute(minMaxDecisionEClass, MIN_MAX_DECISION__MAX_BOUNDARY);

		choiceDecisionEClass = createEClass(CHOICE_DECISION);
		createEAttribute(choiceDecisionEClass, CHOICE_DECISION__MIN_SELECTED);
		createEAttribute(choiceDecisionEClass, CHOICE_DECISION__MAX_SELECTED);
		createEReference(choiceDecisionEClass, CHOICE_DECISION__DEFAULT_SELECTED);
		createEReference(choiceDecisionEClass, CHOICE_DECISION__SELECTED);
		createEReference(choiceDecisionEClass, CHOICE_DECISION__CHOICEVALUES);

		choiceValueEClass = createEClass(CHOICE_VALUE);
		createEAttribute(choiceValueEClass, CHOICE_VALUE__NAME);

		actionEClass = createEClass(ACTION);
		createEAttribute(actionEClass, ACTION__AFFECTS_TO_QUERY);
		createEReference(actionEClass, ACTION__AFFECTS_TO);

		defaultSelectChoiceValueActionEClass = createEClass(DEFAULT_SELECT_CHOICE_VALUE_ACTION);
		createEAttribute(defaultSelectChoiceValueActionEClass, DEFAULT_SELECT_CHOICE_VALUE_ACTION__SELECTED_QUERY);
		createEReference(defaultSelectChoiceValueActionEClass, DEFAULT_SELECT_CHOICE_VALUE_ACTION__SELECTED);

		selectChoiceValueActionEClass = createEClass(SELECT_CHOICE_VALUE_ACTION);
		createEAttribute(selectChoiceValueActionEClass, SELECT_CHOICE_VALUE_ACTION__SELECTED_QUERY);
		createEReference(selectChoiceValueActionEClass, SELECT_CHOICE_VALUE_ACTION__SELECTED);
		createEReference(selectChoiceValueActionEClass, SELECT_CHOICE_VALUE_ACTION__EREFERENCE0);

		validityActionEClass = createEClass(VALIDITY_ACTION);
		createEAttribute(validityActionEClass, VALIDITY_ACTION__CONDITION_QUERY);

		valueActionEClass = createEClass(VALUE_ACTION);
		createEAttribute(valueActionEClass, VALUE_ACTION__VALUE_QUERY);

		defaultValueActionEClass = createEClass(DEFAULT_VALUE_ACTION);
		createEAttribute(defaultValueActionEClass, DEFAULT_VALUE_ACTION__VALUE_QUERY);

		minMaxValuesActionEClass = createEClass(MIN_MAX_VALUES_ACTION);
		createEAttribute(minMaxValuesActionEClass, MIN_MAX_VALUES_ACTION__MIN_VALUE_QUERY);
		createEAttribute(minMaxValuesActionEClass, MIN_MAX_VALUES_ACTION__MAX_VALUE_QUERY);

		nameActionEClass = createEClass(NAME_ACTION);
		createEAttribute(nameActionEClass, NAME_ACTION__NAME_VALUE_QUERY);

		cloneActionEClass = createEClass(CLONE_ACTION);
		createEAttribute(cloneActionEClass, CLONE_ACTION__NUMBER_OF_CLONES);

		// Create enums
		valueTypeEEnum = createEEnum(VALUE_TYPE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		groupEClass.getESuperTypes().add(this.getDecision());
		simpleDecisionEClass.getESuperTypes().add(this.getDecision());
		minMaxDecisionEClass.getESuperTypes().add(this.getSimpleDecision());
		choiceDecisionEClass.getESuperTypes().add(this.getDecision());
		defaultSelectChoiceValueActionEClass.getESuperTypes().add(this.getAction());
		selectChoiceValueActionEClass.getESuperTypes().add(this.getAction());
		validityActionEClass.getESuperTypes().add(this.getAction());
		valueActionEClass.getESuperTypes().add(this.getAction());
		defaultValueActionEClass.getESuperTypes().add(this.getAction());
		minMaxValuesActionEClass.getESuperTypes().add(this.getAction());
		nameActionEClass.getESuperTypes().add(this.getAction());
		cloneActionEClass.getESuperTypes().add(this.getAction());

		// Initialize classes and features; add operations and parameters
		initEClass(decisionModelEClass, DecisionModel.class, "DecisionModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getDecisionModel_Dependencies(), this.getDependency(), null, "dependencies", null, 0, -1, DecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDecisionModel_Decisions(), this.getDecision(), null, "decisions", null, 0, -1, DecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecisionModel_Name(), ecorePackage.getEString(), "name", null, 0, 1, DecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecisionModel_Description(), ecorePackage.getEString(), "description", null, 0, 1, DecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecisionModel_Version(), ecorePackage.getEString(), "version", null, 0, 1, DecisionModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(dependencyEClass, Dependency.class, "Dependency", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getDependency_TriggerQuery(), ecorePackage.getEString(), "triggerQuery", null, 0, 1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDependency_Name(), ecorePackage.getEString(), "name", null, 0, 1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDependency_Condition(), ecorePackage.getEString(), "condition", null, 0, 1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDependency_Description(), ecorePackage.getEString(), "description", null, 0, 1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDependency_Trigger(), this.getDecision(), null, "trigger", null, 0, -1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDependency_Action(), this.getAction(), null, "action", null, 0, -1, Dependency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(decisionEClass, Decision.class, "Decision", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getDecision_ClonedFrom(), this.getDecision(), null, "clonedFrom", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecision_Name(), ecorePackage.getEString(), "name", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecision_Description(), ecorePackage.getEString(), "description", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecision_Validity(), ecorePackage.getEBoolean(), "validity", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecision_Id(), ecorePackage.getEString(), "id", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDecision_Clonable(), ecorePackage.getEBoolean(), "clonable", null, 0, 1, Decision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(groupEClass, Group.class, "Group", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getGroup_Decisions(), this.getDecision(), null, "decisions", null, 0, -1, Group.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(simpleDecisionEClass, SimpleDecision.class, "SimpleDecision", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSimpleDecision_DefaultValue(), ecorePackage.getEString(), "defaultValue", null, 0, 1, SimpleDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSimpleDecision_Value(), ecorePackage.getEString(), "value", null, 0, 1, SimpleDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getSimpleDecision_ValueType(), this.getValueType(), "valueType", null, 0, 1, SimpleDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(minMaxDecisionEClass, MinMaxDecision.class, "MinMaxDecision", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMinMaxDecision_MinBoundary(), ecorePackage.getEInt(), "minBoundary", null, 0, 1, MinMaxDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getMinMaxDecision_MaxBoundary(), ecorePackage.getEInt(), "maxBoundary", null, 0, 1, MinMaxDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(choiceDecisionEClass, ChoiceDecision.class, "ChoiceDecision", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getChoiceDecision_MinSelected(), ecorePackage.getEInt(), "minSelected", null, 0, 1, ChoiceDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getChoiceDecision_MaxSelected(), ecorePackage.getEInt(), "maxSelected", null, 0, 1, ChoiceDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getChoiceDecision_DefaultSelected(), this.getChoiceValue(), null, "defaultSelected", null, 0, -1, ChoiceDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getChoiceDecision_Selected(), this.getChoiceValue(), null, "selected", null, 0, -1, ChoiceDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getChoiceDecision_Choicevalues(), this.getChoiceValue(), null, "choicevalues", null, 0, -1, ChoiceDecision.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(choiceValueEClass, ChoiceValue.class, "ChoiceValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getChoiceValue_Name(), ecorePackage.getEString(), "name", null, 0, 1, ChoiceValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(actionEClass, Action.class, "Action", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAction_AffectsToQuery(), ecorePackage.getEString(), "affectsToQuery", null, 0, 1, Action.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getAction_AffectsTo(), this.getDecision(), null, "affectsTo", null, 0, -1, Action.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(defaultSelectChoiceValueActionEClass, DefaultSelectChoiceValueAction.class, "DefaultSelectChoiceValueAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getDefaultSelectChoiceValueAction_SelectedQuery(), ecorePackage.getEString(), "selectedQuery", null, 0, 1, DefaultSelectChoiceValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getDefaultSelectChoiceValueAction_Selected(), this.getChoiceValue(), null, "selected", null, 1, -1, DefaultSelectChoiceValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(selectChoiceValueActionEClass, SelectChoiceValueAction.class, "SelectChoiceValueAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getSelectChoiceValueAction_SelectedQuery(), ecorePackage.getEString(), "selectedQuery", null, 0, 1, SelectChoiceValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSelectChoiceValueAction_Selected(), this.getChoiceValue(), null, "selected", null, 1, -1, SelectChoiceValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getSelectChoiceValueAction_EReference0(), this.getAction(), null, "EReference0", null, 0, 1, SelectChoiceValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(validityActionEClass, ValidityAction.class, "ValidityAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getValidityAction_ConditionQuery(), ecorePackage.getEString(), "conditionQuery", null, 0, 1, ValidityAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(valueActionEClass, ValueAction.class, "ValueAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getValueAction_ValueQuery(), ecorePackage.getEString(), "valueQuery", null, 0, 1, ValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(defaultValueActionEClass, DefaultValueAction.class, "DefaultValueAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getDefaultValueAction_ValueQuery(), ecorePackage.getEString(), "valueQuery", null, 0, 1, DefaultValueAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(minMaxValuesActionEClass, MinMaxValuesAction.class, "MinMaxValuesAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMinMaxValuesAction_MinValueQuery(), ecorePackage.getEString(), "minValueQuery", null, 0, 1, MinMaxValuesAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getMinMaxValuesAction_MaxValueQuery(), ecorePackage.getEString(), "maxValueQuery", null, 0, 1, MinMaxValuesAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(nameActionEClass, NameAction.class, "NameAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getNameAction_NameValueQuery(), ecorePackage.getEString(), "nameValueQuery", null, 0, 1, NameAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cloneActionEClass, CloneAction.class, "CloneAction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getCloneAction_NumberOfClones(), ecorePackage.getEString(), "numberOfClones", null, 0, 1, CloneAction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(valueTypeEEnum, ValueType.class, "ValueType");
		addEEnumLiteral(valueTypeEEnum, ValueType.INTEGER);
		addEEnumLiteral(valueTypeEEnum, ValueType.BOOLEAN);
		addEEnumLiteral(valueTypeEEnum, ValueType.STRING);
		addEEnumLiteral(valueTypeEEnum, ValueType.FLOAT);
		addEEnumLiteral(valueTypeEEnum, ValueType.TIMESTAMP);

		// Create resource
		createResource(eNS_URI);
	}

} //PlumPackageImpl
